<?php

use Nette\Application\UI\Control,
	Nette\Application\UI\Form;

class UserBox extends Control {

	public function createComponentLoginForm() {
		$form = new Form();
		$form->addText('nickname', 'Jméno:');
		$form->addPassword('password', 'Heslo:');
		$form->addSubmit('loginSubmit', 'Přihlásit' );
		$form->onSuccess[] = callback($this, 'submitLoginForm');

		return $form;
	}

	public function submitLoginForm(Form $form) {
			$values = $form->getValues();
			$user = $this->presenter->getUser();

      try {
				$user->login($values['nickname'], $values['password']);
				$user->setExpiration('+ 30 minutes', TRUE);
			} catch (Exception $e) {
        $this->presenter->flashMessage($e->getMessage(), 'error');
        $this->presenter->redirect('this');
			}
      
      $this->presenter->flashMessage('', 'success');
      $this->presenter->redirect('this');
      
	}
  
  public function createComponentRegisterForm(){
    $registerForm = new Form();
    
    $registerForm->addText('login', 'Přihlašovací jméno:')
        ->addRule(Form::FILLED, 'Přihlašovací jméno musí být vyplněno')
        ->addRule(Form::MAX_LENGTH, 'Přihlašovací jméno může být maximálně 20 znaků dlouhé', 20)
        ->addRule(Form::MIN_LENGTH, 'Přihlašovací jméno musí být minimálně 3 znaky dlouhé', 3);
    
    $registerForm->addPassword('password', 'Heslo:')
        ->addRule(Form::FILLED, 'Heslo musí být vyplněno')
        ->addRule(Form::MAX_LENGTH, 'Heslo může být maximálně 20 znaků dlouhé', 20)
        ->addRule(Form::MIN_LENGTH, 'Heslo musí být minimálně 3 znaky dlouhé', 3);
    
    $registerForm->addPassword('password_again', 'Heslo znovu:')
        ->addRule(Form::EQUAL, 'Hesla musí být totožná', $registerForm['password']);
    
    $registerForm->addText('email', 'Email:')
        ->addRule(Form::FILLED, 'Email musí být vyplněn')
        ->addRule(Form::EMAIL, 'Email musí být validní');
    
    $registerForm->addCheckbox('rules', 'Souhlasím s podmínkami')
        ->addRule(Form::EQUAL, 'Musíte souhlasit s našimi podmínkami', TRUE);
    $registerForm->addSubmit ('send', 'Registrovat');
    $registerForm->onSuccess[] = callback($this, 'registerFormSuccess');
    
    return $registerForm;
  }

	public function registerFormSuccess(Form $form){
    $values = $form->getValues();
    $um = $this->context->createUserManager();
    
    if($um->isLoginFree($values['login'])){
      $form->addError('Toto přihlašovací jméno je již použito, zvolte jiné');
      return false;
    }
    
    if($um->isEmailFree($values['email'])){
      $form->addError('Toto email je již používán, zvolte jiný');
      return false;
    }
    
    try{
      $um->registerNewUser($values['login'], $values['password'], $values['email']);
    }catch(\Exception $e){
      echo $e;exit();
    }
    
    // Todo email odeslat
    
    $this->flashMessage('Na Vámi zadanou emailovou adresu jsme poslali potvrzovací email, pomocí něho svoji registraci aktivujete', 'info');
    $this->redirect('this');
    
  }

	public function handleLogout() {
			$user = $this->presenter->getUser();
			$user->logout(true);
      $this->presenter->flashMessage('', 'success');
      $this->presenter->redirect('this');
	}

	public function render() {
		$template = $this->template;
		$template->setFile(__DIR__ . '/userbox.latte');
		$user = $this->presenter->getUser();
		$template->user = $user;
		$template->render();
	}

}
